OpenStack Ocata : Configure Swift#3 (Storage Node)
2017/03/05 |
Configure OpenStack Object Storage (Swift).
This example is based on the emvironment like follows.
-+---------------+----------------------------+------------ | | | | eth0|10.0.0.30 eth0|10.0.0.50 | +-----------+-----------+ +-----------+-----------+ | | [ Control Node ] | | [ Proxy Node ] | | | | | | | | MariaDB RabbitMQ | | Swift Proxy | | | Memcached httpd | | | | | Keystone | | | | +-----------------------+ +-----------------------+ | +---------------+----------------------------+----------------------------+------------ eth0|10.0.0.71 eth0|10.0.0.72 eth0|10.0.0.73 +-----------+-----------+ +-----------+-----------+ +-----------+-----------+ | [ Storage Node#1 ] | | [ Storage Node#2 ] | | [ Storage Node#3 ] | | | | | | | | Swift-Account | | Swift-Account | | Swift-Account | | Swift-Container | | Swift-Container | | Swift-Container | | Swift-Object | | Swift-Object | | Swift-Object | +-----------------------+ +-----------------------+ +-----------------------+ |
Configure Storage Node on this section.
It's OK to set the same settings mostly on all Storage Nodes, but only IP address and Device number are different each other, though. Furthermore, add Hard drives on each Storage Nodes and create a partition "/dev/sdb1" for this settings. |
|
[1] | Install Swift-Account, Swift-Container, Swift-Object and others on all Storage Node like follows. |
[root@snode01 ~]# yum --enablerepo=centos-openstack-ocata,epel -y install openstack-swift-account openstack-swift-container openstack-swift-object xfsprogs rsync openssh-clients
|
[2] | Format free space of disk (/dev/sdb1 on this example) with XFS and mount on srv/node on allStorage Node like follows. (the number "device*" is different on each Storage Nodes) |
[root@snode01 ~]# mkfs.xfs -i size=1024 -s size=4096 /dev/sdb1 meta-data=/dev/sdb1 isize=1024 agcount=4, agsize=1310656 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=5242624, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0[root@snode01 ~]# mkdir -p /srv/node/device0 [root@snode01 ~]# mount -o noatime,nodiratime,nobarrier /dev/sdb1 /srv/node/device0 [root@snode01 ~]# chown -R swift. /srv/node
[root@snode01 ~]#
vi /etc/fstab # add to the end /dev/sdb1 /srv/node/device0 xfs noatime,nodiratime,nobarrier 0 0 |
[3] | Copy Swift Ring files from the Swift Proxy Node to all Storage Nodes. |
[root@proxy ~]# scp /etc/swift/*.gz 10.0.0.71:/etc/swift/ root@10.0.0.71's password: account.ring.gz 100% 3912 3.8KB/s 00:00 container.ring.gz 100% 3904 3.8KB/s 00:00 object.ring.gz 100% 3895 3.8KB/s 00:00 |
[4] | Configure Swift and Rsync on all Storage Nodes. |
[root@snode01 ~]# chown swift. /etc/swift/*.gz
[root@snode01 ~]#
vi /etc/swift/swift.conf # set the value which is set on Proxy Node [swift-hash] swift_hash_path_suffix = swift_shared_path
swift_hash_path_prefix = swift_shared_path
[root@snode01 ~]#
vi /etc/swift/account-server.conf # line 6: change bind_ip = 0.0.0.0 bind_port = 6202
[root@snode01 ~]#
vi /etc/swift/container-server.conf # line 6: change bind_ip = 0.0.0.0 bind_port = 6201
[root@snode01 ~]#
vi /etc/swift/object-server.conf # line 6: change bind_ip = 0.0.0.0 bind_port = 6200
[root@snode01 ~]#
vi /etc/rsyncd.conf # add to the end
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
uid = swift
gid = swift
# specify the IP address of each storage node
address = 10.0.0.71
[account]
path = /srv/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/account.lock
[container]
path = /srv/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/container.lock
[object]
path = /srv/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/object.lock
[swift_server]
path = /etc/swift
read only = true
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 5
lock file = /var/lock/swift_server.lock
|
[5] | On Storage Node, if SELinux is enabled, change policy like follows. Replace the number of device "device*" to each Node's one. |
[root@snode01 ~]# semanage fcontext -a -t swift_data_t /srv/node/device0 [root@snode01 ~]# restorecon /srv/node/device0
|
[6] | On Storage Node, if Firewalld is running, allow service ports. |
[root@snode01 ~]# firewall-cmd --add-port={873/tcp,6200/tcp,6201/tcp,6202/tcp} --permanent success [root@snode01 ~]# firewall-cmd --reload success |
[7] | Start Swift services. |
[root@snode01 ~]# systemctl start rsyncd [root@snode01 ~]# systemctl enable rsyncd [root@snode01 ~]# for ringtype in account container object; do
systemctl start openstack-swift-$ringtype systemctl enable openstack-swift-$ringtype for service in replicator updater auditor; do if [ $ringtype != 'account' ] || [ $service != 'updater' ]; then systemctl start openstack-swift-$ringtype-$service systemctl enable openstack-swift-$ringtype-$service fi done done |